library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages -------------------------------------------------------------------- tidyverse 1.3.1 --
√ ggplot2 3.3.5     √ purrr   0.3.4
√ tibble  3.1.6     √ dplyr   1.0.8
√ tidyr   1.2.0     √ stringr 1.4.0
√ readr   2.1.2     √ forcats 0.5.1
-- Conflicts ----------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(readxl)
Warning: package ‘readxl’ was built under R version 4.1.3
candy_2015 <- read_excel("../raw_data/boing-boing-candy-2015.xlsx")
candy_2016 <- read_excel("../raw_data/boing-boing-candy-2016.xlsx")
candy_2017 <- read_excel("../raw_data/boing-boing-candy-2017.xlsx")
New names:
* `` -> ...114
here::here()
[1] "C:/Users/mahri/OneDrive/CodeClan/dirty_data_project/dirty_data_codeclan_project_mahri/dirty_data_task_4_mahri"

From glimpse

head(candy_2015)
glimpse(candy_2016)
Rows: 1,259
Columns: 123
$ Timestamp                                                                                                                                   <dttm> ~
$ `Are you going actually going trick or treating yourself?`                                                                                  <chr> ~
$ `Your gender:`                                                                                                                              <chr> ~
$ `How old are you?`                                                                                                                          <chr> ~
$ `Which country do you live in?`                                                                                                             <chr> ~
$ `Which state, province, county do you live in?`                                                                                             <chr> ~
$ `[100 Grand Bar]`                                                                                                                           <chr> ~
$ `[Anonymous brown globs that come in black and orange wrappers]`                                                                            <chr> ~
$ `[Any full-sized candy bar]`                                                                                                                <chr> ~
$ `[Black Jacks]`                                                                                                                             <chr> ~
$ `[Bonkers (the candy)]`                                                                                                                     <chr> ~
$ `[Bonkers (the board game)]`                                                                                                                <chr> ~
$ `[Bottle Caps]`                                                                                                                             <chr> ~
$ `[Box'o'Raisins]`                                                                                                                           <chr> ~
$ `[Broken glow stick]`                                                                                                                       <chr> ~
$ `[Butterfinger]`                                                                                                                            <chr> ~
$ `[Cadbury Creme Eggs]`                                                                                                                      <chr> ~
$ `[Candy Corn]`                                                                                                                              <chr> ~
$ `[Candy that is clearly just the stuff given out for free at restaurants]`                                                                  <chr> ~
$ `[Caramellos]`                                                                                                                              <chr> ~
$ `[Cash, or other forms of legal tender]`                                                                                                    <chr> ~
$ `[Chardonnay]`                                                                                                                              <chr> ~
$ `[Chick-o-Sticks (we don’t know what that is)]`                                                                                             <chr> ~
$ `[Chiclets]`                                                                                                                                <chr> ~
$ `[Coffee Crisp]`                                                                                                                            <chr> ~
$ `[Creepy Religious comics/Chick Tracts]`                                                                                                    <chr> ~
$ `[Dental paraphenalia]`                                                                                                                     <chr> ~
$ `[Dots]`                                                                                                                                    <chr> ~
$ `[Dove Bars]`                                                                                                                               <chr> ~
$ `[Fuzzy Peaches]`                                                                                                                           <chr> ~
$ `[Generic Brand Acetaminophen]`                                                                                                             <chr> ~
$ `[Glow sticks]`                                                                                                                             <chr> ~
$ `[Goo Goo Clusters]`                                                                                                                        <chr> ~
$ `[Good N' Plenty]`                                                                                                                          <chr> ~
$ `[Gum from baseball cards]`                                                                                                                 <chr> ~
$ `[Gummy Bears straight up]`                                                                                                                 <chr> ~
$ `[Hard Candy]`                                                                                                                              <chr> ~
$ `[Healthy Fruit]`                                                                                                                           <chr> ~
$ `[Heath Bar]`                                                                                                                               <chr> ~
$ `[Hershey's Dark Chocolate]`                                                                                                                <chr> ~
$ `[Hershey’s Milk Chocolate]`                                                                                                                <chr> ~
$ `[Hershey's Kisses]`                                                                                                                        <chr> ~
$ `[Hugs (actual physical hugs)]`                                                                                                             <chr> ~
$ `[Jolly Rancher (bad flavor)]`                                                                                                              <chr> ~
$ `[Jolly Ranchers (good flavor)]`                                                                                                            <chr> ~
$ `[JoyJoy (Mit Iodine!)]`                                                                                                                    <chr> ~
$ `[Junior Mints]`                                                                                                                            <chr> ~
$ `[Senior Mints]`                                                                                                                            <chr> ~
$ `[Kale smoothie]`                                                                                                                           <chr> ~
$ `[Kinder Happy Hippo]`                                                                                                                      <chr> ~
$ `[Kit Kat]`                                                                                                                                 <chr> ~
$ `[LaffyTaffy]`                                                                                                                              <chr> ~
$ `[LemonHeads]`                                                                                                                              <chr> ~
$ `[Licorice (not black)]`                                                                                                                    <chr> ~
$ `[Licorice (yes black)]`                                                                                                                    <chr> ~
$ `[Lindt Truffle]`                                                                                                                           <chr> ~
$ `[Lollipops]`                                                                                                                               <chr> ~
$ `[Mars]`                                                                                                                                    <chr> ~
$ `[Mary Janes]`                                                                                                                              <chr> ~
$ `[Maynards]`                                                                                                                                <chr> ~
$ `[Mike and Ike]`                                                                                                                            <chr> ~
$ `[Milk Duds]`                                                                                                                               <chr> ~
$ `[Milky Way]`                                                                                                                               <chr> ~
$ `[Regular M&Ms]`                                                                                                                            <chr> ~
$ `[Peanut M&M’s]`                                                                                                                            <chr> ~
$ `[Blue M&M's]`                                                                                                                              <chr> ~
$ `[Red M&M's]`                                                                                                                               <chr> ~
$ `[Third Party M&M's]`                                                                                                                       <chr> ~
$ `[Minibags of chips]`                                                                                                                       <chr> ~
$ `[Mint Kisses]`                                                                                                                             <chr> ~
$ `[Mint Juleps]`                                                                                                                             <chr> ~
$ `[Mr. Goodbar]`                                                                                                                             <chr> ~
$ `[Necco Wafers]`                                                                                                                            <chr> ~
$ `[Nerds]`                                                                                                                                   <chr> ~
$ `[Nestle Crunch]`                                                                                                                           <chr> ~
$ `[Now'n'Laters]`                                                                                                                            <chr> ~
$ `[Peeps]`                                                                                                                                   <chr> ~
$ `[Pencils]`                                                                                                                                 <chr> ~
$ `[Person of Interest Season 3 DVD Box Set (not including Disc 4 with hilarious outtakes)]`                                                  <chr> ~
$ `[Pixy Stix]`                                                                                                                               <chr> ~
$ `[Reese’s Peanut Butter Cups]`                                                                                                              <chr> ~
$ `[Reese's Pieces]`                                                                                                                          <chr> ~
$ `[Reggie Jackson Bar]`                                                                                                                      <chr> ~
$ `[Rolos]`                                                                                                                                   <chr> ~
$ `[Skittles]`                                                                                                                                <chr> ~
$ `[Smarties (American)]`                                                                                                                     <chr> ~
$ `[Smarties (Commonwealth)]`                                                                                                                 <chr> ~
$ `[Snickers]`                                                                                                                                <chr> ~
$ `[Sourpatch Kids (i.e. abominations of nature)]`                                                                                            <chr> ~
$ `[Spotted Dick]`                                                                                                                            <chr> ~
$ `[Starburst]`                                                                                                                               <chr> ~
$ `[Sweet Tarts]`                                                                                                                             <chr> ~
$ `[Swedish Fish]`                                                                                                                            <chr> ~
$ `[Sweetums (a friend to diabetes)]`                                                                                                         <chr> ~
$ `[Tic Tacs]`                                                                                                                                <chr> ~
$ `[Those odd marshmallow circus peanut things]`                                                                                              <chr> ~
$ `[Three Musketeers]`                                                                                                                        <chr> ~
$ `[Tolberone something or other]`                                                                                                            <chr> ~
$ `[Trail Mix]`                                                                                                                               <chr> ~
$ `[Twix]`                                                                                                                                    <chr> ~
$ `[Vials of pure high fructose corn syrup, for main-lining into your vein]`                                                                  <chr> ~
$ `[Vicodin]`                                                                                                                                 <chr> ~
$ `[Whatchamacallit Bars]`                                                                                                                    <chr> ~
$ `[White Bread]`                                                                                                                             <chr> ~
$ `[Whole Wheat anything]`                                                                                                                    <chr> ~
$ `[York Peppermint Patties]`                                                                                                                 <chr> ~
$ `Please list any items not included above that give you JOY.`                                                                               <chr> ~
$ `Please list any items not included above that give you DESPAIR.`                                                                           <chr> ~
$ `Please leave any witty, snarky or thoughtful remarks or comments regarding your choices.`                                                  <chr> ~
$ `Guess the number of mints in my hand.`                                                                                                     <chr> ~
$ `Betty or Veronica?`                                                                                                                        <chr> ~
$ `"That dress* that went viral a few years back - when I first saw it, it was ________"`                                                     <chr> ~
$ `What is your favourite font?`                                                                                                              <chr> ~
$ `Please estimate the degree(s) of separation you have from the following celebrities [JK Rowling]`                                          <chr> ~
$ `Please estimate the degree(s) of separation you have from the following celebrities [JJ Abrams]`                                           <chr> ~
$ `Please estimate the degree(s) of separation you have from the following celebrities [Beyoncé]`                                             <chr> ~
$ `Please estimate the degree(s) of separation you have from the following celebrities [Bieber]`                                              <chr> ~
$ `Please estimate the degree(s) of separation you have from the following celebrities [Kevin Bacon]`                                         <chr> ~
$ `Please estimate the degree(s) of separation you have from the following celebrities [Francis Bacon (1561 - 1626)]`                         <chr> ~
$ `Which day do you prefer, Friday or Sunday?`                                                                                                <chr> ~
$ `Do you eat apples the correct way, East to West (side to side) or do you eat them like a freak of nature, South to North (bottom to top)?` <chr> ~
$ `When you see the above image of the 4 different websites, which one would you most likely check out (please be honest).`                   <chr> ~
$ `[York Peppermint Patties] Ignore`                                                                                                          <lgl> ~
glimpse(candy_2017)
Rows: 2,460
Columns: 120
$ `Internal ID`                                                                            <dbl> 90258773, ~
$ `Q1: GOING OUT?`                                                                         <chr> NA, "No", ~
$ `Q2: GENDER`                                                                             <chr> NA, "Male"~
$ `Q3: AGE`                                                                                <chr> NA, "44", ~
$ `Q4: COUNTRY`                                                                            <chr> NA, "USA",~
$ `Q5: STATE, PROVINCE, COUNTY, ETC`                                                       <chr> NA, "NM", ~
$ `Q6 | 100 Grand Bar`                                                                     <chr> NA, "MEH",~
$ `Q6 | Anonymous brown globs that come in black and orange wrappers\t(a.k.a. Mary Janes)` <chr> NA, "DESPA~
$ `Q6 | Any full-sized candy bar`                                                          <chr> NA, "JOY",~
$ `Q6 | Black Jacks`                                                                       <chr> NA, "MEH",~
$ `Q6 | Bonkers (the candy)`                                                               <chr> NA, "DESPA~
$ `Q6 | Bonkers (the board game)`                                                          <chr> NA, "DESPA~
$ `Q6 | Bottle Caps`                                                                       <chr> NA, "DESPA~
$ `Q6 | Box'o'Raisins`                                                                     <chr> NA, "DESPA~
$ `Q6 | Broken glow stick`                                                                 <chr> NA, "DESPA~
$ `Q6 | Butterfinger`                                                                      <chr> NA, "DESPA~
$ `Q6 | Cadbury Creme Eggs`                                                                <chr> NA, "MEH",~
$ `Q6 | Candy Corn`                                                                        <chr> NA, "MEH",~
$ `Q6 | Candy that is clearly just the stuff given out for free at restaurants`            <chr> NA, "DESPA~
$ `Q6 | Caramellos`                                                                        <chr> NA, "MEH",~
$ `Q6 | Cash, or other forms of legal tender`                                              <chr> NA, "JOY",~
$ `Q6 | Chardonnay`                                                                        <chr> NA, "MEH",~
$ `Q6 | Chick-o-Sticks (we don’t know what that is)`                                       <chr> NA, "DESPA~
$ `Q6 | Chiclets`                                                                          <chr> NA, "DESPA~
$ `Q6 | Coffee Crisp`                                                                      <chr> NA, "DESPA~
$ `Q6 | Creepy Religious comics/Chick Tracts`                                              <chr> NA, "DESPA~
$ `Q6 | Dental paraphenalia`                                                               <chr> NA, "DESPA~
$ `Q6 | Dots`                                                                              <chr> NA, "MEH",~
$ `Q6 | Dove Bars`                                                                         <chr> NA, "JOY",~
$ `Q6 | Fuzzy Peaches`                                                                     <chr> NA, "DESPA~
$ `Q6 | Generic Brand Acetaminophen`                                                       <chr> NA, "DESPA~
$ `Q6 | Glow sticks`                                                                       <chr> NA, "DESPA~
$ `Q6 | Goo Goo Clusters`                                                                  <chr> NA, "DESPA~
$ `Q6 | Good N' Plenty`                                                                    <chr> NA, "MEH",~
$ `Q6 | Gum from baseball cards`                                                           <chr> NA, "DESPA~
$ `Q6 | Gummy Bears straight up`                                                           <chr> NA, "MEH",~
$ `Q6 | Hard Candy`                                                                        <chr> NA, "MEH",~
$ `Q6 | Healthy Fruit`                                                                     <chr> NA, "DESPA~
$ `Q6 | Heath Bar`                                                                         <chr> NA, "MEH",~
$ `Q6 | Hershey's Dark Chocolate`                                                          <chr> NA, "JOY",~
$ `Q6 | Hershey’s Milk Chocolate`                                                          <chr> NA, "JOY",~
$ `Q6 | Hershey's Kisses`                                                                  <chr> NA, "MEH",~
$ `Q6 | Hugs (actual physical hugs)`                                                       <chr> NA, "DESPA~
$ `Q6 | Jolly Rancher (bad flavor)`                                                        <chr> NA, "DESPA~
$ `Q6 | Jolly Ranchers (good flavor)`                                                      <chr> NA, "MEH",~
$ `Q6 | JoyJoy (Mit Iodine!)`                                                              <chr> NA, "DESPA~
$ `Q6 | Junior Mints`                                                                      <chr> NA, "DESPA~
$ `Q6 | Senior Mints`                                                                      <chr> NA, "DESPA~
$ `Q6 | Kale smoothie`                                                                     <chr> NA, "DESPA~
$ `Q6 | Kinder Happy Hippo`                                                                <chr> NA, "DESPA~
$ `Q6 | Kit Kat`                                                                           <chr> NA, "JOY",~
$ `Q6 | LaffyTaffy`                                                                        <chr> NA, "DESPA~
$ `Q6 | LemonHeads`                                                                        <chr> NA, "MEH",~
$ `Q6 | Licorice (not black)`                                                              <chr> NA, "MEH",~
$ `Q6 | Licorice (yes black)`                                                              <chr> NA, "JOY",~
$ `Q6 | Lindt Truffle`                                                                     <chr> NA, "MEH",~
$ `Q6 | Lollipops`                                                                         <chr> NA, "DESPA~
$ `Q6 | Mars`                                                                              <chr> NA, "DESPA~
$ `Q6 | Maynards`                                                                          <chr> NA, "DESPA~
$ `Q6 | Mike and Ike`                                                                      <chr> NA, "MEH",~
$ `Q6 | Milk Duds`                                                                         <chr> NA, "MEH",~
$ `Q6 | Milky Way`                                                                         <chr> NA, "JOY",~
$ `Q6 | Regular M&Ms`                                                                      <chr> NA, "JOY",~
$ `Q6 | Peanut M&M’s`                                                                      <chr> NA, "MEH",~
$ `Q6 | Blue M&M's`                                                                        <chr> NA, "JOY",~
$ `Q6 | Red M&M's`                                                                         <chr> NA, "JOY",~
$ `Q6 | Green Party M&M's`                                                                 <chr> NA, "JOY",~
$ `Q6 | Independent M&M's`                                                                 <chr> NA, "JOY",~
$ `Q6 | Abstained from M&M'ing.`                                                           <chr> NA, "DESPA~
$ `Q6 | Minibags of chips`                                                                 <chr> NA, "DESPA~
$ `Q6 | Mint Kisses`                                                                       <chr> NA, "MEH",~
$ `Q6 | Mint Juleps`                                                                       <chr> NA, "DESPA~
$ `Q6 | Mr. Goodbar`                                                                       <chr> NA, "DESPA~
$ `Q6 | Necco Wafers`                                                                      <chr> NA, "DESPA~
$ `Q6 | Nerds`                                                                             <chr> NA, "DESPA~
$ `Q6 | Nestle Crunch`                                                                     <chr> NA, "JOY",~
$ `Q6 | Now'n'Laters`                                                                      <chr> NA, "DESPA~
$ `Q6 | Peeps`                                                                             <chr> NA, "DESPA~
$ `Q6 | Pencils`                                                                           <chr> NA, "DESPA~
$ `Q6 | Pixy Stix`                                                                         <chr> NA, "DESPA~
$ `Q6 | Real Housewives of Orange County Season 9 Blue-Ray`                                <chr> NA, "DESPA~
$ `Q6 | Reese’s Peanut Butter Cups`                                                        <chr> NA, "JOY",~
$ `Q6 | Reese's Pieces`                                                                    <chr> NA, "JOY",~
$ `Q6 | Reggie Jackson Bar`                                                                <chr> NA, "DESPA~
$ `Q6 | Rolos`                                                                             <chr> NA, "JOY",~
$ `Q6 | Sandwich-sized bags filled with BooBerry Crunch`                                   <chr> NA, "DESPA~
$ `Q6 | Skittles`                                                                          <chr> NA, "DESPA~
$ `Q6 | Smarties (American)`                                                               <chr> NA, "DESPA~
$ `Q6 | Smarties (Commonwealth)`                                                           <chr> NA, "DESPA~
$ `Q6 | Snickers`                                                                          <chr> NA, "MEH",~
$ `Q6 | Sourpatch Kids (i.e. abominations of nature)`                                      <chr> NA, "DESPA~
$ `Q6 | Spotted Dick`                                                                      <chr> NA, "DESPA~
$ `Q6 | Starburst`                                                                         <chr> NA, "MEH",~
$ `Q6 | Sweet Tarts`                                                                       <chr> NA, "DESPA~
$ `Q6 | Swedish Fish`                                                                      <chr> NA, "MEH",~
$ `Q6 | Sweetums (a friend to diabetes)`                                                   <chr> NA, "DESPA~
$ `Q6 | Take 5`                                                                            <chr> NA, "DESPA~
$ `Q6 | Tic Tacs`                                                                          <chr> NA, "DESPA~
$ `Q6 | Those odd marshmallow circus peanut things`                                        <chr> NA, "DESPA~
$ `Q6 | Three Musketeers`                                                                  <chr> NA, "JOY",~
$ `Q6 | Tolberone something or other`                                                      <chr> NA, "JOY",~
$ `Q6 | Trail Mix`                                                                         <chr> NA, "DESPA~
$ `Q6 | Twix`                                                                              <chr> NA, "JOY",~
$ `Q6 | Vials of pure high fructose corn syrup, for main-lining into your vein`            <chr> NA, "DESPA~
$ `Q6 | Vicodin`                                                                           <chr> NA, "DESPA~
$ `Q6 | Whatchamacallit Bars`                                                              <chr> NA, "DESPA~
$ `Q6 | White Bread`                                                                       <chr> NA, "DESPA~
$ `Q6 | Whole Wheat anything`                                                              <chr> NA, "DESPA~
$ `Q6 | York Peppermint Patties`                                                           <chr> NA, "DESPA~
$ `Q7: JOY OTHER`                                                                          <chr> NA, "Mound~
$ `Q8: DESPAIR OTHER`                                                                      <chr> NA, NA, NA~
$ `Q9: OTHER COMMENTS`                                                                     <chr> NA, "Botto~
$ `Q10: DRESS`                                                                             <chr> NA, "White~
$ ...114                                                                                   <chr> NA, NA, NA~
$ `Q11: DAY`                                                                               <chr> NA, "Sunda~
$ `Q12: MEDIA [Daily Dish]`                                                                <dbl> NA, NA, NA~
$ `Q12: MEDIA [Science]`                                                                   <dbl> NA, 1, NA,~
$ `Q12: MEDIA [ESPN]`                                                                      <dbl> NA, NA, NA~
$ `Q12: MEDIA [Yahoo]`                                                                     <dbl> NA, NA, NA~
$ `Click Coordinates (x, y)`                                                               <chr> NA, "(84, ~
library(janitor)

Attaching package: ‘janitor’

The following objects are masked from ‘package:stats’:

    chisq.test, fisher.test

janitor_candy_2015 <- janitor::clean_names(candy_2015)
janitor_candy_2015

janitor_candy_2016 <- janitor::clean_names(candy_2016)
janitor_candy_2016

janitor_candy_2017 <- janitor::clean_names(candy_2017)
janitor_candy_2017

just looking at who is reporting back about these ones…


janitor_candy_2017 %>% 
  select(q3_age, q2_gender, q6_independent_m_ms, q6_green_party_m_ms)

janitor_candy_2016 %>% 
  select(york_peppermint_patties_ignore)
#nobody 

REMOVE AND RENAME

Step 1 - Remove and add for each year

Step 2 - RENAME FOR EACH YEAR

2015 REMOVE AND ADD

# names(janitor_candy_2015)

col_removed_candy_2015 <- janitor_candy_2015 %>% 
  select(-c(116:124), -c(97:113), -c(93:95), -c(90, 91), 
         -c(peterson_brand_sidewalk_chalk, spotted_dick, mint_leaves, 
            joy_joy_mit_iodine, minibags_of_chips, lapel_pins, kale_smoothie, 
            hugs_actual_physical_hugs, heath_bar, healthy_fruit, 
            creepy_religious_comics_chick_tracts, broken_glow_stick, 
            glow_sticks, generic_brand_acetaminophen, dental_paraphenalia, 
            cash_or_other_forms_of_legal_tender,
            vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein, 
            box_o_raisins, timestamp)) %>% 
  add_column(year = "2015", .before = 1) %>% 
  mutate(id_number = row_number(), .before = 2)


col_removed_candy_2015
#view(col_removed_candy_2015)

2015 RENAME

2016 - REMOVE AND ADD

col_removed_candy_2016 <- janitor_candy_2016 %>% 
  select(-c(104, 105, 107:123), 
         -c(vicodin, vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein, 
            trail_mix, spotted_dick,
            person_of_interest_season_3_dvd_box_set_not_including_disc_4_with_hilarious_outtakes,
            minibags_of_chips, kale_smoothie, joy_joy_mit_iodine, hugs_actual_physical_hugs, 
            heath_bar, healthy_fruit, glow_sticks, generic_brand_acetaminophen, 
            dental_paraphenalia, creepy_religious_comics_chick_tracts, chardonnay,
            cash_or_other_forms_of_legal_tender, broken_glow_stick, boxo_raisins, 
            bonkers_the_board_game, timestamp)) %>% 
  add_column(year = "2016", .before = 1) %>% 
  mutate(id_number = max(candy_2015_renamed$id_number) + row_number(), .before = 2)
col_removed_candy_2016 
 # mutate(person_id = max(candy_2015_clean$person_id) + row_number()) %>%

2016 RENAME

# Again checking on Mary Janes column differences 
# col_removed_candy_2016 %>% 
#   select(anonymous_brown_globs_that_come_in_black_and_orange_wrappers, mary_janes)

candy_2016_renamed <- col_removed_candy_2016 %>% 
  rename(trick_or_treating = 
           are_you_going_actually_going_trick_or_treating_yourself, 
         gender = your_gender, 
         age = how_old_are_you, 
         country = which_country_do_you_live_in, 
         state_or_prov = which_state_province_county_do_you_live_in, 
         anonymous_black_and_orange_wrapper = 
           anonymous_brown_globs_that_come_in_black_and_orange_wrappers, 
         bonkers = bonkers_the_candy, 
         restaurant_candy = 
           candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants, 
         chick_o_stick = chick_o_sticks_we_don_t_know_what_that_is, 
         gummy_bears = gummy_bears_straight_up, 
         hersheys_milk_chocolate = hershey_s_milk_chocolate, 
         licorice_black = licorice_yes_black, 
         peanut_m_ms = peanut_m_m_s, 
         party_bag_m_ms = third_party_m_ms, 
         reeses_peanut_butter_cups = reese_s_peanut_butter_cups, 
         sourpatch_kids = sourpatch_kids_i_e_abominations_of_nature, 
         sweetarts = sweet_tarts, 
         sweetums = sweetums_a_friend_to_diabetes, 
         circus_peanuts = those_odd_marshmallow_circus_peanut_things, 
         toblerone = tolberone_something_or_other)

candy_2016_renamed
NA

2017 CLEAN AND ADD Note - should have removed the “q6_” before this, but have done so in the next chunk

col_removed_candy_2017 <- janitor_candy_2017 %>%  
  select(-c(102, 104, 105, 107, 108, 110:120), 
         -c(q6_spotted_dick, 
            q6_sandwich_sized_bags_filled_with_boo_berry_crunch,
            q6_real_housewives_of_orange_county_season_9_blue_ray, 
            q6_minibags_of_chips, 
            q6_abstained_from_m_ming, 
            q6_kale_smoothie, q6_joy_joy_mit_iodine, 
            q6_hugs_actual_physical_hugs, 
            q6_heath_bar, 
            q6_healthy_fruit, 
            q6_glow_sticks, 
            q6_generic_brand_acetaminophen, 
            q6_dental_paraphenalia, 
            q6_creepy_religious_comics_chick_tracts, 
            q6_chardonnay, 
            q6_cash_or_other_forms_of_legal_tender, 
            q6_broken_glow_stick, 
            q6_boxo_raisins, 
            q6_bonkers_the_board_game, 
            internal_id)) %>% 
  add_column(year = "2017", .before = 1) %>% 
  mutate(id_number = max(candy_2016_renamed$id_number) + row_number(), .before = 2)

col_removed_candy_2017

2017 RENAME - get rid of “q1/2/3/4/5/6” at the start of col names and rename to match 2015 and 16


candy_2017_q_removed <- col_removed_candy_2017 %>% 
  rename_all(~ sub("^[q0-9]{2}_", "", 
                   make.names(names(col_removed_candy_2017))))


candy_2017_renamed <- candy_2017_q_removed %>% 
  rename(trick_or_treating = going_out, 
         state_or_prov = state_province_county_etc, 
         x100_grand_bar = `100_grand_bar`, 
         mary_janes = 
           anonymous_brown_globs_that_come_in_black_and_orange_wrappers_a_k_a_mary_janes, 
         bonkers = bonkers_the_candy, 
         restaurant_candy = 
           candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants, 
         chick_o_stick = chick_o_sticks_we_don_t_know_what_that_is, 
         gummy_bears = gummy_bears_straight_up, 
         hersheys_milk_chocolate = hershey_s_milk_chocolate, 
         licorice_black = licorice_yes_black, 
         peanut_m_ms = peanut_m_m_s, 
         green_m_ms = green_party_m_ms, 
         lone_m_ms = independent_m_ms, 
         reeses_peanut_butter_cups = reese_s_peanut_butter_cups, 
         sourpatch_kids = sourpatch_kids_i_e_abominations_of_nature, 
         sweetarts = sweet_tarts, 
         sweetums = sweetums_a_friend_to_diabetes, 
         circus_peanuts = those_odd_marshmallow_circus_peanut_things, 
         toblerone = tolberone_something_or_other)
  
candy_2017_renamed
view(candy_2015_renamed)
view(candy_2016_renamed)
view(candy_2017_renamed)

Getting an idea of people’s responses:


distinct(candy_2015_renamed, age) 
  #(chr) 146 responses, some silly and some strange
distinct(candy_2015_renamed, trick_or_treating) 
  #(chr) yes or no (NAs in 2017)
distinct(candy_2015_renamed, starburst)


distinct(candy_2016_renamed, age) 
  # (chr) 98 incl silly/strange
distinct(candy_2016_renamed, trick_or_treating) 
  #(chr) Yes No (NAs in 2017)
distinct(candy_2016_renamed, gender) 
  # Male, Female, Other, I'd rather not say, NA
distinct(candy_2016_renamed, country) 
  #93 some silly, some e.g. USA, US, us, u.s.a. etc 
distinct(candy_2016_renamed, starburst)


distinct(candy_2017_renamed, age) 
  #(chr) 107 incl silly/strange
distinct(candy_2017_renamed, trick_or_treating)
  #(chr) Yes No and NA
distinct(candy_2017_renamed, gender) 
  #Male, Female, Other, I'd rather not say, NA
distinct(candy_2017_renamed, country) 
  #118 some silly, some e.g. USA, US, us, u.s.a. etc 
distinct(candy_2017_renamed, starburst)

Joining all three years by binding rows so as to keep everything

bound_candy <- bind_rows(candy_2015_renamed, 
                         candy_2016_renamed, 
                         candy_2017_renamed)


bound_candy <- bound_candy %>% 
  relocate(country, .before = 5) %>% 
  relocate(state_or_prov, .before = 6) %>% 
  relocate(gender, .before = 7)


# view(bound_candy)

QUESTION 1 What is the total number of candy ratings given across the three years. (Number of candy ratings, not the number of raters. Don’t count missing values)

ANSWER - 590,010 ratings

AGE CLEANING Age is a character column with 274 values. They are numbers, NAs, and strange and silly values - changed age column to a numeric but it output strange figures, so I specified integer and strange answers became NAs. - Seems unlikely that anyone > 100 years old is answering so I removed them

# bound_candy %>% 
#  distinct(age)

bound_age_to_numeric <- bound_candy %>% 
  mutate(age = as.integer(age)) %>% 
  arrange(age)
Warning: Problem while computing `age = as.integer(age)`.
i NAs introduced by coercion
Warning: Problem while computing `age = as.integer(age)`.
i NAs introduced by coercion to integer range
# bound_age_to_numeric %>% 
# distinct(age)

bound_age_cleaning <- bound_age_to_numeric %>%
  mutate(age = if_else(age > 99, NA_integer_, age))
bound_age_cleaning
# view(bound_age_cleaning)

QUESTION TWO What was the average age of people who are going out trick or treating?

I know the responses for trick or treating are “Yes” “No” and “NA”

ANSWER - The (rounded) average age of those going trick or treating is 35 years old (34.94897 is the unrounded value)



bound_age_cleaning %>% 
  select(age, trick_or_treating) %>% 
  group_by(trick_or_treating) %>% 
  summarise(average_age = round(mean(age, na.rm = TRUE)))

# to just get the answer for Yes on it's own: 
bound_age_cleaning %>% 
  select(age, trick_or_treating) %>% 
  group_by(trick_or_treating) %>% 
  filter(trick_or_treating == "Yes") %>% 
  summarise(average_age = round(mean(age, na.rm = TRUE)))
NA

QUESTION THREE What was the average age of people who are not going trick or treating? ANSWER - The (rounded) average age of those not going trick or treating is 39 years old (39.10454 is the unrounded value)

bound_age_cleaning %>% 
  select(age, trick_or_treating) %>% 
  group_by(trick_or_treating) %>% 
  summarise(average_age = round(mean(age, na.rm = TRUE)))

# to just get the answer for No on it's own: 
bound_age_cleaning %>% 
  select(age, trick_or_treating) %>% 
  group_by(trick_or_treating) %>% 
  filter(trick_or_treating == "No") %>% 
  summarise(average_age = round(mean(age, na.rm = TRUE)))
NA

QUESTION FOUR For each of joy, despair and meh, which candy bar revived the most of these ratings?

As in question 1, a 2 column tibble with candy and rating was created and a count of each distinct answer was made - firstly counting each for each response and each candy, then filtering to find the maximum count for each rating.

ANSWER -
Despair: gum that comes with baseball cards returned the most despair responses with 7,341 Joy:Full sized candy bars made the most people joyful with 7,589 responses. This seems very generic so I ran it again to remove the full sized candy bars and the top Joy response was: 7369 responses for reeses peanut butter cups Meh: 1,570 “Meh” responses were given for lollipops


rated_candy <- bound_candy %>% 
  select(-c(year, id_number, age, 
            trick_or_treating, country, 
            state_or_prov, gender, any_full_sized_candy_bar)) %>%
  pivot_longer(butterfinger:take_5, 
               names_to = "candy", 
               values_to = "rating")
rated_candy

rated_candy %>% 
  group_by(rating, candy) %>% 
  summarise(number_of_ratings = n()) %>% 
  filter(number_of_ratings == max(number_of_ratings))
`summarise()` has grouped output by 'rating'. You can override using the `.groups` argument.

COUNTRY CLEANING

Firstly getting an idea of NAs and distinct country values:

Using stringr and regex to reduce “country” values - For columns that were numbers or clearly fake (silly) answers, I checked the state or province column to see if there was a match to a country - I checked my work one row at a time to try and ensure I did not change anything that was not meant to be changed. - I am sure there are faster/ better ways of doing this, but I was practicing different options

library(stringr)

country = str_replace_all(country, pattern = “[ ][uU]+[ .!][sS]+[ .!][aA][ .!]*“,”States”) tried this to change what was now States USA USA but it changed that to StatesStatesStates and also Australia to AStatestralia…

bound_country_clean <- bound_candy %>% 
  mutate(country = str_replace_all(country, pattern = "[0-9][0-9][.][0-9]", "States"),
         country = str_replace_all(country, pattern = "[3|4|5][0-9]", "States"),
         country = str_replace_all(country, pattern = "^[ ]*[uU]+[ .!]*[sS]+[ .!]*[aA]*[ .!]*", "States"),
         country = str_replace_all(country, pattern = "^[uU][nited]+\\s[sS][tT]*[aA|eE|sS][tT][eE][sS|aA]", "States"),
         country = str_replace_all(country, pattern = "^[uU][nN][iI][tT][eE][dD|sS]+\\s[sS][tT][aA][tT][eE|sS][sS]*", "States"),
         # the above doesn't work for all... i presume there are spaces somewhere
         country = str_replace_all(country, pattern = "^[uU][nN][iI][tT][sS]+\\s[sS][tT][aA][tT][eE][sS]*", "States"),
        country = str_replace_all(country, pattern = "[sS][tT][aA|eE][tT]*[eE][sS]*", "States"), 
        
         country = str_replace_all(country, pattern = "[uU]+[sS]+[aA]+", "States"),
        country = str_replace_all(country, pattern = "^[mM][uU|eE][rR]+[iI][cC|kK][aA]", "States"),
        country = str_replace_all(country, pattern = "^[aA][mM][eE][rR][iI][cC][aA]", "States"),
        country = str_replace_all(country, pattern = "^\\'[mM][uU|eE][rR][iI][cC][aA]", "States"),
        country = str_replace_all(country, pattern = "[sS][tT][aA][tT][eE][sS][!]", "States"),
        country = str_replace_all(country, pattern = "[a-zA-Z]+ [-]+ [uU][sS][aA]", "States"), 
        # the above only changed "the best one - usa" to "the best States" 
        country = str_replace_all(country, pattern = "[of] [aA][merica]", ""),
        # changes States of America to States oerica and i also have united states oerica
        country = str_replace_all(country, pattern = "cascadia", "States"),
        country = str_replace_all(country, pattern = "Narnia", "States"),
        country = str_replace_all(country, pattern = "Sub-Canadian North America... 'Merica", "States"),
        country = str_replace_all(country, pattern = "Trumpistan", "States"),
        country = str_replace_all(country, pattern = "The republic of Cascadia", "States"),
        country = str_replace_all(country, pattern = "unhinged ", ""),
        country = str_replace_all(country, pattern = "North Carolina", "States"),
        country = str_replace_all(country, pattern = "Pittsburgh", "States"),
        country = str_replace_all(country, pattern = "New York", "States"),
        country = str_replace_all(country, pattern = "Ahem....Amerca", "States"),
        country = str_replace_all(country, pattern = "UD", "States"),  
        country = str_replace_all(country, pattern = "New Jersey", "States"),
        country = str_replace_all(country, pattern = "Alaska", "States"),
        country = str_replace_all(country, pattern = "N. America", "States"),
        country = str_replace_all(country, pattern = "I don't know anymore", "States"),
        country = str_replace_all(country, pattern = "!.*", ""),
        country = str_replace_all(country, pattern = "States[sS|dD|aA]", "States"),
        country = str_replace_all(country, pattern = "States oerica", "States"),
        country = str_replace_all(country, pattern = "Statesof A", "States"),
        country = str_replace_all(country, pattern = "United States", "States"),
        country = str_replace_all(country, pattern = "The United States", "States"),
        country = str_replace_all(country, pattern = "The States", "States"),
        country = str_replace_all(country, pattern = "Statestates States", "States"),
        country = str_replace_all(country, pattern = "Statestates States States", "States"),
        country = str_replace_all(country, pattern = "Statestates", "States"),
        country = str_replace_all(country, pattern = "States States", "States"),
        country = str_replace_all(country, pattern = "^[uU]+[.]*[kK]+[.]*", "United Kingdom"),
        country = str_replace_all(country, pattern = "^[uU][nited]+\\s[kK][iI][nN][dD][oO][mM]", "United Kingdom"),
        country = str_replace_all(country, pattern = "^[uU][nN][iI][tT][eE][dD]+\\s[kK][iI][nN][gG][dD][oO][mM]", "United Kingdom"),
        country = str_replace_all(country, pattern = "^[eE][nN][gG|dD][lL][aA][nN][dD]", "United Kingdom"),
        country = str_replace_all(country, pattern = "Scotland", "United Kingdom"),
        country = str_replace_all(country, pattern = "^[cC][a-zA-Z]{5}", "Canada"),
        country = str_replace_all(country, pattern = "^[cC]+[aA]+[nN]+[aA]+[dD]+[aA]+[aA|iI|rR]*[aA|nN]*[iI]*[aA]*", "Canada"),
        country = str_replace_all(country, pattern = "Canae", "Canada"),
        country = str_replace_all(country, pattern = "^Canada`", "Canada"),
        country = str_replace_all(country, pattern = "soviet canuckistan`", "Canada")
      
        )

bound_country_clean %>% 
  distinct(country)
view(bound_country_clean)

Still and issue: # States? Hard to tell anymore.. # one “United States” not changing (probably spaces issue??) # States (I think but it’s an election year so who can really tell) # I pretend to be from Canada, but I am really from the United States. # there isn’t one for old men # one of ones (previously “one of the good ones”?) # The Yoo Essaayyyyyy # this one # neverland # somewhere # god’s country # EUA # See above # Not the or Canada (previously not the US or canada) # Denial # Earth # insanity lately # A # Can # Atlantis # Narnia # 1 # subscribe to dm4uz3 on youtube
# Fear and Loathing

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpgYGANCg0KYGBge3J9DQpjYW5keV8yMDE1IDwtIHJlYWRfZXhjZWwoIi4uL3Jhd19kYXRhL2JvaW5nLWJvaW5nLWNhbmR5LTIwMTUueGxzeCIpDQpjYW5keV8yMDE2IDwtIHJlYWRfZXhjZWwoIi4uL3Jhd19kYXRhL2JvaW5nLWJvaW5nLWNhbmR5LTIwMTYueGxzeCIpDQpjYW5keV8yMDE3IDwtIHJlYWRfZXhjZWwoIi4uL3Jhd19kYXRhL2JvaW5nLWJvaW5nLWNhbmR5LTIwMTcueGxzeCIpDQoNCmhlcmU6OmhlcmUoKQ0KYGBgDQoNCkZyb20gZ2xpbXBzZSANCmBgYHtyfQ0KaGVhZChjYW5keV8yMDE1KQ0KZ2xpbXBzZShjYW5keV8yMDE2KQ0KZ2xpbXBzZShjYW5keV8yMDE3KQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoamFuaXRvcikNCg0KYGBgDQoNCmBgYHtyfQ0KDQpqYW5pdG9yX2NhbmR5XzIwMTUgPC0gamFuaXRvcjo6Y2xlYW5fbmFtZXMoY2FuZHlfMjAxNSkNCmphbml0b3JfY2FuZHlfMjAxNQ0KDQpqYW5pdG9yX2NhbmR5XzIwMTYgPC0gamFuaXRvcjo6Y2xlYW5fbmFtZXMoY2FuZHlfMjAxNikNCmphbml0b3JfY2FuZHlfMjAxNg0KDQpqYW5pdG9yX2NhbmR5XzIwMTcgPC0gamFuaXRvcjo6Y2xlYW5fbmFtZXMoY2FuZHlfMjAxNykNCmphbml0b3JfY2FuZHlfMjAxNw0KYGBgDQoNCg0KanVzdCBsb29raW5nIGF0IHdobyBpcyByZXBvcnRpbmcgYmFjayBhYm91dCB0aGVzZSBvbmVzLi4uIA0KYGBge3J9DQoNCmphbml0b3JfY2FuZHlfMjAxNyAlPiUgDQogIHNlbGVjdChxM19hZ2UsIHEyX2dlbmRlciwgcTZfaW5kZXBlbmRlbnRfbV9tcywgcTZfZ3JlZW5fcGFydHlfbV9tcykNCiMgYWxsIHR5cGVzIG9mIHBlb3BsZQ0KamFuaXRvcl9jYW5keV8yMDE2ICU+JSANCiAgc2VsZWN0KHlvcmtfcGVwcGVybWludF9wYXR0aWVzX2lnbm9yZSkNCiNub2JvZHkgDQpgYGANCg0KKipSRU1PVkUgQU5EIFJFTkFNRSoqIA0KDQpTdGVwIDEgLSBSZW1vdmUgYW5kIGFkZCBmb3IgZWFjaCB5ZWFyDQoNCi0gRm9yIGVhY2ggb2YgdGhlIHRocmVlIHllYXJzLCBJIHJlbW92ZWQgY29sdW1ucyB0aGF0IHdlcmVuJ3QgY2FuZHkgaGF2aW5nIA0KIHNlYXJjaGVkIHRoZSBpbnRlcm5ldCB0byBjaGVjayBvbiB0aG9zZSBJIHdhcyBub3Qgc3VyZSBvZi4gSSBhbHNvIGxvb2tlZCBpbnRvDQogcmVzcG9uc2VzIGZvciBhIGZldyBvZiB0aGUgY29sdW1ucyAoZS5nLiBkaWZmZXJlbnQgbSZtcyBjb2xvcnMpIHRvIHNlZSBpZiB0aGVyZQ0KIHdlcmUgbW9zdGx5IGpva2UgcmVzcG9uc2VzLyBhbnkgcmVhc29uIGZvciBtZSB0byBqb2luIHRoZW0gdG9nZXRoZXIgKEkga2VwdA0KIHRoZW0gYXMgaXMgZXhjcGV0IGZvciBjaGFuZ2luZyBzb21lIG5hbWVzIHRvIG1ha2UgaXQgY2xlYXJlciB0byBtZSB3aGF0IHRoZXkgDQogd2VyZSAtIGUuZy4gcGFydHkgYmFnIG9mIG0mbXMpDQotIEkgcmVtb3ZlZCBjb2x1bW5zIGJ5IGluZGV4IGZyb20gbGFzdCBwb3NpdGlvbiB0byBmaXJzdCBzbyB0aGF0IEkgY291bGQgY2hlY2sgDQogdGhhdCBJIGRpZG4ndCByZW1vdmUgdGhlIHdyb25nIGNvbHVtbnMvIGFmZmVjdCB0aGUgb3JkZXIgYXMgSSB3ZW50Lg0KLSBBbHNvIGFkZGluZyBhICJ5ZWFyIiBjb2x1bW4gYW5kIHJlbW92aW5nICJ0aW1lc3RhbXAiIGZyb20gMjAxNSBhbmQgMjAxNiANCiBmb3IgcmVmZXJlbmNpbmcgdGhlIGNvcnJlY3QgeWVhcnMgYWZ0ZXIgYmluZGluZyB0aGUgcm93cyBvZiBhbGwgdGhyZWUgdG9nZXRoZXINCiAoc2VlIGlmIGNhbiB3b3JrIG91dCBleHRyYWN0aW5nIHllYXIgZnJvbSB0aW1lc3RhbXAgYW5kIG1vdmluZyBvdmVyIGxhdGVyKS4gDQogQWRkaW5nIHRoaXMgYWZ0ZXIgc28gdGhhdCBjb2x1bW4gaW5kZXggaXNuJ3QgcnVpbmVkLg0KLSBBZGRlZCBhIHBlcnNvbmFsIElEIG51bWJlciBqdXN0IHRvIHRyeSBkaWZmZXJlbnQgd2F5cyBvZiBhZGRpbmcvIG11dGF0aW5nDQogY29sdW1ucy4gKG5vdGUgLSB3ZW50IHRvIGJhc2UgUiB0byBkbyB0aGlzIGZvciAyMDE2ICYgMTcpDQotIEkgcHJvYmFibHkgZGlkbid0IGhhdmUgdG8gcmVtb3ZlIGFsbCBvZiB0aGlzIChkZXBlbmRpbmcgb24gcXVlc3Rpb24gYW5kIG91dGNvbWUpIA0KYnV0IEkgbGlrZSB0aGF0IGl0IGdpdmVzIG1lIGxlc3MgdG8gd29yayB3aXRoLg0KDQpTdGVwIDIgLSBSRU5BTUUgRk9SIEVBQ0ggWUVBUg0KDQotIFJlbmFtaW5nIGNvbHVtbnMgc28gdGhleSBtYXRjaCBvdGhlciB5ZWFycyB3aGVuIGJpbmRpbmcgcm93cy4gDQotIENvbnNpZGVyZWQgbWVyZ2luZyB0aGUgMjAxNSBhbmQgMjAxNiAiYW5vbnltb3VzIGJyb3duIGdsb2JzIGV0Yy4iIGNvbHVtbnMgd2l0aCANCiB0aGVpciAiTWFyeSBKYW5lcyIgY29sdW1ucyBiZWNhdXNlIGluIDIwMTcgaXQgaXMgcmVjb3JkZWQgYXMgImFub24gYnJvd24uLi4gYWthIA0KIE1hcnkgSmFuZXMiKS4gQnV0IGZyb20gbG9va2luZyBhdCBpbmRpdmlkdWFscyByZXNwb25zZXMsIHRoZXkgZG9uJ3QgbWF0Y2ggdXAgc28gDQogSSdsbCBsZWF2ZSBhcyAiYW5vbnltb3VzX2JsYWNrX2FuZF9vcmFuZ2Vfd3JhcHBlciIgYW5kICJtYXJ5X2phbmVzIi4NCg0KDQoyMDE1IFJFTU9WRSBBTkQgQUREIA0KDQpgYGB7cn0NCiMgbmFtZXMoamFuaXRvcl9jYW5keV8yMDE1KQ0KDQpjb2xfcmVtb3ZlZF9jYW5keV8yMDE1IDwtIGphbml0b3JfY2FuZHlfMjAxNSAlPiUgDQogIHNlbGVjdCgtYygxMTY6MTI0KSwgLWMoOTc6MTEzKSwgLWMoOTM6OTUpLCAtYyg5MCwgOTEpLCANCiAgICAgICAgIC1jKHBldGVyc29uX2JyYW5kX3NpZGV3YWxrX2NoYWxrLCBzcG90dGVkX2RpY2ssIG1pbnRfbGVhdmVzLCANCiAgICAgICAgICAgIGpveV9qb3lfbWl0X2lvZGluZSwgbWluaWJhZ3Nfb2ZfY2hpcHMsIGxhcGVsX3BpbnMsIGthbGVfc21vb3RoaWUsIA0KICAgICAgICAgICAgaHVnc19hY3R1YWxfcGh5c2ljYWxfaHVncywgaGVhdGhfYmFyLCBoZWFsdGh5X2ZydWl0LCANCiAgICAgICAgICAgIGNyZWVweV9yZWxpZ2lvdXNfY29taWNzX2NoaWNrX3RyYWN0cywgYnJva2VuX2dsb3dfc3RpY2ssIA0KICAgICAgICAgICAgZ2xvd19zdGlja3MsIGdlbmVyaWNfYnJhbmRfYWNldGFtaW5vcGhlbiwgZGVudGFsX3BhcmFwaGVuYWxpYSwgDQogICAgICAgICAgICBjYXNoX29yX290aGVyX2Zvcm1zX29mX2xlZ2FsX3RlbmRlciwNCiAgICAgICAgICAgIHZpYWxzX29mX3B1cmVfaGlnaF9mcnVjdG9zZV9jb3JuX3N5cnVwX2Zvcl9tYWluX2xpbmluZ19pbnRvX3lvdXJfdmVpbiwgDQogICAgICAgICAgICBib3hfb19yYWlzaW5zLCB0aW1lc3RhbXApKSAlPiUgDQogIGFkZF9jb2x1bW4oeWVhciA9ICIyMDE1IiwgLmJlZm9yZSA9IDEpICU+JSANCiAgbXV0YXRlKGlkX251bWJlciA9IHJvd19udW1iZXIoKSwgLmJlZm9yZSA9IDIpDQoNCg0KY29sX3JlbW92ZWRfY2FuZHlfMjAxNQ0KI3ZpZXcoY29sX3JlbW92ZWRfY2FuZHlfMjAxNSkNCg0KDQpgYGANCg0KDQoNCjIwMTUgUkVOQU1FDQpgYGB7cn0NCiMgTG9va2luZyBhdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJlc3BvbnNlcyBmb3IgTWFyeSBKYW5lcyB0aG91Z2h0cw0KDQojIGNvbF9yZW1vdmVkX2NhbmR5XzIwMTUgJT4lIA0KIyAgc2VsZWN0KGFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVycywgbWFyeV9qYW5lcykNCg0KY2FuZHlfMjAxNV9yZW5hbWVkIDwtIGNvbF9yZW1vdmVkX2NhbmR5XzIwMTUgJT4lIA0KICByZW5hbWUoYWdlID0gaG93X29sZF9hcmVfeW91LCANCiAgICAgICAgIHRyaWNrX29yX3RyZWF0aW5nID0gYXJlX3lvdV9nb2luZ19hY3R1YWxseV9nb2luZ190cmlja19vcl90cmVhdGluZ195b3Vyc2VsZiwNCiAgICAgICAgIGFub255bW91c19ibGFja19hbmRfb3JhbmdlX3dyYXBwZXIgPSANCiAgICAgICAgICAgYW5vbnltb3VzX2Jyb3duX2dsb2JzX3RoYXRfY29tZV9pbl9ibGFja19hbmRfb3JhbmdlX3dyYXBwZXJzLCANCiAgICAgICAgIGJyYWNoX25vdF9pbmNsdWRpbmdfY2FuZHlfY29ybiA9IGJyYWNoX3Byb2R1Y3RzX25vdF9pbmNsdWRpbmdfY2FuZHlfY29ybiwgDQogICAgICAgICByZXN0YXVyYW50X2NhbmR5ID0gDQogICAgICAgICAgIGNhbmR5X3RoYXRfaXNfY2xlYXJseV9qdXN0X3RoZV9zdHVmZl9naXZlbl9vdXRfZm9yX2ZyZWVfYXRfcmVzdGF1cmFudHMsIA0KICAgICAgICAgaGVyc2hleXNfZGFya19jaG9jb2xhdGUgPSBkYXJrX2Nob2NvbGF0ZV9oZXJzaGV5LCANCiAgICAgICAgIGd1bW15X2JlYXJzID0gZ3VtbXlfYmVhcnNfc3RyYWlnaHRfdXAsIA0KICAgICAgICAgaGVyc2hleXNfa2lzc2FibGVzID0gaGVyc2hleV9zX2tpc3NhYmxlcywgDQogICAgICAgICBoZXJzaGV5c19taWxrX2Nob2NvbGF0ZSA9IGhlcnNoZXlfc19taWxrX2Nob2NvbGF0ZSwgDQogICAgICAgICBsaWNvcmljZV9ibGFjayA9IGxpY29yaWNlLCANCiAgICAgICAgIHJlZXNlc19wZWFudXRfYnV0dGVyX2N1cHMgPSByZWVzZV9zX3BlYW51dF9idXR0ZXJfY3VwcywgDQogICAgICAgICB0b2JsZXJvbmUgPSB0b2xiZXJvbmVfc29tZXRoaW5nX29yX290aGVyLCANCiAgICAgICAgIHBlYW51dF9tX21zID0gcGVhbnV0X21fbV9zLCANCiAgICAgICAgIGNoaWNrX29fc3RpY2sgPSBjaGlja19vX3N0aWNrc193ZV9kb25fdF9rbm93X3doYXRfdGhhdF9pcywgDQogICAgICAgICBjaXJjdXNfcGVhbnV0cyA9IHRob3NlX29kZF9tYXJzaG1hbGxvd19jaXJjdXNfcGVhbnV0X3RoaW5ncywgDQogICAgICAgICBzZWFfc2FsdF9jaG9jb2xhdGUgPSANCiAgICAgICAgICAgc2VhX3NhbHRfZmxhdm9yZWRfc3R1ZmZfcHJvYmFibHlfY2hvY29sYXRlX3NpbmNlX3RoaXNfaXNfdGhlX2l0X2ZsYXZvcl9vZl90aGVfeWVhcikNCg0KYGBgDQoNCg0KMjAxNiAtIFJFTU9WRSBBTkQgQUREIA0KDQpgYGB7cn0NCmNvbF9yZW1vdmVkX2NhbmR5XzIwMTYgPC0gamFuaXRvcl9jYW5keV8yMDE2ICU+JSANCiAgc2VsZWN0KC1jKDEwNCwgMTA1LCAxMDc6MTIzKSwgDQogICAgICAgICAtYyh2aWNvZGluLCB2aWFsc19vZl9wdXJlX2hpZ2hfZnJ1Y3Rvc2VfY29ybl9zeXJ1cF9mb3JfbWFpbl9saW5pbmdfaW50b195b3VyX3ZlaW4sIA0KICAgICAgICAgICAgdHJhaWxfbWl4LCBzcG90dGVkX2RpY2ssDQogICAgICAgICAgICBwZXJzb25fb2ZfaW50ZXJlc3Rfc2Vhc29uXzNfZHZkX2JveF9zZXRfbm90X2luY2x1ZGluZ19kaXNjXzRfd2l0aF9oaWxhcmlvdXNfb3V0dGFrZXMsDQogICAgICAgICAgICBtaW5pYmFnc19vZl9jaGlwcywga2FsZV9zbW9vdGhpZSwgam95X2pveV9taXRfaW9kaW5lLCBodWdzX2FjdHVhbF9waHlzaWNhbF9odWdzLCANCiAgICAgICAgICAgIGhlYXRoX2JhciwgaGVhbHRoeV9mcnVpdCwgZ2xvd19zdGlja3MsIGdlbmVyaWNfYnJhbmRfYWNldGFtaW5vcGhlbiwgDQogICAgICAgICAgICBkZW50YWxfcGFyYXBoZW5hbGlhLCBjcmVlcHlfcmVsaWdpb3VzX2NvbWljc19jaGlja190cmFjdHMsIGNoYXJkb25uYXksDQogICAgICAgICAgICBjYXNoX29yX290aGVyX2Zvcm1zX29mX2xlZ2FsX3RlbmRlciwgYnJva2VuX2dsb3dfc3RpY2ssIGJveG9fcmFpc2lucywgDQogICAgICAgICAgICBib25rZXJzX3RoZV9ib2FyZF9nYW1lLCB0aW1lc3RhbXApKSAlPiUgDQogIGFkZF9jb2x1bW4oeWVhciA9ICIyMDE2IiwgLmJlZm9yZSA9IDEpICU+JSANCiAgbXV0YXRlKGlkX251bWJlciA9IG1heChjYW5keV8yMDE1X3JlbmFtZWQkaWRfbnVtYmVyKSArIHJvd19udW1iZXIoKSwgLmJlZm9yZSA9IDIpDQpjb2xfcmVtb3ZlZF9jYW5keV8yMDE2IA0KYGBgDQoNCjIwMTYgUkVOQU1FDQoNCmBgYHtyfQ0KIyBBZ2FpbiBjaGVja2luZyBvbiBNYXJ5IEphbmVzIGNvbHVtbiBkaWZmZXJlbmNlcyANCiMgY29sX3JlbW92ZWRfY2FuZHlfMjAxNiAlPiUgDQojICAgc2VsZWN0KGFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVycywgbWFyeV9qYW5lcykNCg0KY2FuZHlfMjAxNl9yZW5hbWVkIDwtIGNvbF9yZW1vdmVkX2NhbmR5XzIwMTYgJT4lIA0KICByZW5hbWUodHJpY2tfb3JfdHJlYXRpbmcgPSANCiAgICAgICAgICAgYXJlX3lvdV9nb2luZ19hY3R1YWxseV9nb2luZ190cmlja19vcl90cmVhdGluZ195b3Vyc2VsZiwgDQogICAgICAgICBnZW5kZXIgPSB5b3VyX2dlbmRlciwgDQogICAgICAgICBhZ2UgPSBob3dfb2xkX2FyZV95b3UsIA0KICAgICAgICAgY291bnRyeSA9IHdoaWNoX2NvdW50cnlfZG9feW91X2xpdmVfaW4sIA0KICAgICAgICAgc3RhdGVfb3JfcHJvdiA9IHdoaWNoX3N0YXRlX3Byb3ZpbmNlX2NvdW50eV9kb195b3VfbGl2ZV9pbiwgDQogICAgICAgICBhbm9ueW1vdXNfYmxhY2tfYW5kX29yYW5nZV93cmFwcGVyID0gDQogICAgICAgICAgIGFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVycywgDQogICAgICAgICBib25rZXJzID0gYm9ua2Vyc190aGVfY2FuZHksIA0KICAgICAgICAgcmVzdGF1cmFudF9jYW5keSA9IA0KICAgICAgICAgICBjYW5keV90aGF0X2lzX2NsZWFybHlfanVzdF90aGVfc3R1ZmZfZ2l2ZW5fb3V0X2Zvcl9mcmVlX2F0X3Jlc3RhdXJhbnRzLCANCiAgICAgICAgIGNoaWNrX29fc3RpY2sgPSBjaGlja19vX3N0aWNrc193ZV9kb25fdF9rbm93X3doYXRfdGhhdF9pcywgDQogICAgICAgICBndW1teV9iZWFycyA9IGd1bW15X2JlYXJzX3N0cmFpZ2h0X3VwLCANCiAgICAgICAgIGhlcnNoZXlzX21pbGtfY2hvY29sYXRlID0gaGVyc2hleV9zX21pbGtfY2hvY29sYXRlLCANCiAgICAgICAgIGxpY29yaWNlX2JsYWNrID0gbGljb3JpY2VfeWVzX2JsYWNrLCANCiAgICAgICAgIHBlYW51dF9tX21zID0gcGVhbnV0X21fbV9zLCANCiAgICAgICAgIHBhcnR5X2JhZ19tX21zID0gdGhpcmRfcGFydHlfbV9tcywgDQogICAgICAgICByZWVzZXNfcGVhbnV0X2J1dHRlcl9jdXBzID0gcmVlc2Vfc19wZWFudXRfYnV0dGVyX2N1cHMsIA0KICAgICAgICAgc291cnBhdGNoX2tpZHMgPSBzb3VycGF0Y2hfa2lkc19pX2VfYWJvbWluYXRpb25zX29mX25hdHVyZSwgDQogICAgICAgICBzd2VldGFydHMgPSBzd2VldF90YXJ0cywgDQogICAgICAgICBzd2VldHVtcyA9IHN3ZWV0dW1zX2FfZnJpZW5kX3RvX2RpYWJldGVzLCANCiAgICAgICAgIGNpcmN1c19wZWFudXRzID0gdGhvc2Vfb2RkX21hcnNobWFsbG93X2NpcmN1c19wZWFudXRfdGhpbmdzLCANCiAgICAgICAgIHRvYmxlcm9uZSA9IHRvbGJlcm9uZV9zb21ldGhpbmdfb3Jfb3RoZXIpDQoNCmNhbmR5XzIwMTZfcmVuYW1lZA0KDQpgYGANCg0KDQoyMDE3IENMRUFOIEFORCBBREQNCk5vdGUgLSBzaG91bGQgaGF2ZSByZW1vdmVkIHRoZSAicTZfIiBiZWZvcmUgdGhpcywgYnV0IGhhdmUgZG9uZSBzbyBpbiB0aGUgbmV4dCANCmNodW5rIA0KDQpgYGB7cn0NCmNvbF9yZW1vdmVkX2NhbmR5XzIwMTcgPC0gamFuaXRvcl9jYW5keV8yMDE3ICU+JSAgDQogIHNlbGVjdCgtYygxMDIsIDEwNCwgMTA1LCAxMDcsIDEwOCwgMTEwOjEyMCksIA0KICAgICAgICAgLWMocTZfc3BvdHRlZF9kaWNrLCANCiAgICAgICAgICAgIHE2X3NhbmR3aWNoX3NpemVkX2JhZ3NfZmlsbGVkX3dpdGhfYm9vX2JlcnJ5X2NydW5jaCwNCiAgICAgICAgICAgIHE2X3JlYWxfaG91c2V3aXZlc19vZl9vcmFuZ2VfY291bnR5X3NlYXNvbl85X2JsdWVfcmF5LCANCiAgICAgICAgICAgIHE2X21pbmliYWdzX29mX2NoaXBzLCANCiAgICAgICAgICAgIHE2X2Fic3RhaW5lZF9mcm9tX21fbWluZywgDQogICAgICAgICAgICBxNl9rYWxlX3Ntb290aGllLCBxNl9qb3lfam95X21pdF9pb2RpbmUsIA0KICAgICAgICAgICAgcTZfaHVnc19hY3R1YWxfcGh5c2ljYWxfaHVncywgDQogICAgICAgICAgICBxNl9oZWF0aF9iYXIsIA0KICAgICAgICAgICAgcTZfaGVhbHRoeV9mcnVpdCwgDQogICAgICAgICAgICBxNl9nbG93X3N0aWNrcywgDQogICAgICAgICAgICBxNl9nZW5lcmljX2JyYW5kX2FjZXRhbWlub3BoZW4sIA0KICAgICAgICAgICAgcTZfZGVudGFsX3BhcmFwaGVuYWxpYSwgDQogICAgICAgICAgICBxNl9jcmVlcHlfcmVsaWdpb3VzX2NvbWljc19jaGlja190cmFjdHMsIA0KICAgICAgICAgICAgcTZfY2hhcmRvbm5heSwgDQogICAgICAgICAgICBxNl9jYXNoX29yX290aGVyX2Zvcm1zX29mX2xlZ2FsX3RlbmRlciwgDQogICAgICAgICAgICBxNl9icm9rZW5fZ2xvd19zdGljaywgDQogICAgICAgICAgICBxNl9ib3hvX3JhaXNpbnMsIA0KICAgICAgICAgICAgcTZfYm9ua2Vyc190aGVfYm9hcmRfZ2FtZSwgDQogICAgICAgICAgICBpbnRlcm5hbF9pZCkpICU+JSANCiAgYWRkX2NvbHVtbih5ZWFyID0gIjIwMTciLCAuYmVmb3JlID0gMSkgJT4lIA0KICBtdXRhdGUoaWRfbnVtYmVyID0gbWF4KGNhbmR5XzIwMTZfcmVuYW1lZCRpZF9udW1iZXIpICsgcm93X251bWJlcigpLCAuYmVmb3JlID0gMikNCg0KY29sX3JlbW92ZWRfY2FuZHlfMjAxNw0KYGBgDQoNCjIwMTcgUkVOQU1FIC0gZ2V0IHJpZCBvZiAicTEvMi8zLzQvNS82IiBhdCB0aGUgc3RhcnQgb2YgY29sIG5hbWVzDQphbmQgcmVuYW1lIHRvIG1hdGNoIDIwMTUgYW5kIDE2DQoNCmBgYHtyfQ0KDQpjYW5keV8yMDE3X3FfcmVtb3ZlZCA8LSBjb2xfcmVtb3ZlZF9jYW5keV8yMDE3ICU+JSANCiAgcmVuYW1lX2FsbCh+IHN1YigiXltxMC05XXsyfV8iLCAiIiwgDQogICAgICAgICAgICAgICAgICAgbWFrZS5uYW1lcyhuYW1lcyhjb2xfcmVtb3ZlZF9jYW5keV8yMDE3KSkpKQ0KDQoNCmNhbmR5XzIwMTdfcmVuYW1lZCA8LSBjYW5keV8yMDE3X3FfcmVtb3ZlZCAlPiUgDQogIHJlbmFtZSh0cmlja19vcl90cmVhdGluZyA9IGdvaW5nX291dCwgDQogICAgICAgICBzdGF0ZV9vcl9wcm92ID0gc3RhdGVfcHJvdmluY2VfY291bnR5X2V0YywgDQogICAgICAgICB4MTAwX2dyYW5kX2JhciA9IGAxMDBfZ3JhbmRfYmFyYCwgDQogICAgICAgICBtYXJ5X2phbmVzID0gDQogICAgICAgICAgIGFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVyc19hX2tfYV9tYXJ5X2phbmVzLCANCiAgICAgICAgIGJvbmtlcnMgPSBib25rZXJzX3RoZV9jYW5keSwgDQogICAgICAgICByZXN0YXVyYW50X2NhbmR5ID0gDQogICAgICAgICAgIGNhbmR5X3RoYXRfaXNfY2xlYXJseV9qdXN0X3RoZV9zdHVmZl9naXZlbl9vdXRfZm9yX2ZyZWVfYXRfcmVzdGF1cmFudHMsIA0KICAgICAgICAgY2hpY2tfb19zdGljayA9IGNoaWNrX29fc3RpY2tzX3dlX2Rvbl90X2tub3dfd2hhdF90aGF0X2lzLCANCiAgICAgICAgIGd1bW15X2JlYXJzID0gZ3VtbXlfYmVhcnNfc3RyYWlnaHRfdXAsIA0KICAgICAgICAgaGVyc2hleXNfbWlsa19jaG9jb2xhdGUgPSBoZXJzaGV5X3NfbWlsa19jaG9jb2xhdGUsIA0KICAgICAgICAgbGljb3JpY2VfYmxhY2sgPSBsaWNvcmljZV95ZXNfYmxhY2ssIA0KICAgICAgICAgcGVhbnV0X21fbXMgPSBwZWFudXRfbV9tX3MsIA0KICAgICAgICAgZ3JlZW5fbV9tcyA9IGdyZWVuX3BhcnR5X21fbXMsIA0KICAgICAgICAgbG9uZV9tX21zID0gaW5kZXBlbmRlbnRfbV9tcywgDQogICAgICAgICByZWVzZXNfcGVhbnV0X2J1dHRlcl9jdXBzID0gcmVlc2Vfc19wZWFudXRfYnV0dGVyX2N1cHMsIA0KICAgICAgICAgc291cnBhdGNoX2tpZHMgPSBzb3VycGF0Y2hfa2lkc19pX2VfYWJvbWluYXRpb25zX29mX25hdHVyZSwgDQogICAgICAgICBzd2VldGFydHMgPSBzd2VldF90YXJ0cywgDQogICAgICAgICBzd2VldHVtcyA9IHN3ZWV0dW1zX2FfZnJpZW5kX3RvX2RpYWJldGVzLCANCiAgICAgICAgIGNpcmN1c19wZWFudXRzID0gdGhvc2Vfb2RkX21hcnNobWFsbG93X2NpcmN1c19wZWFudXRfdGhpbmdzLCANCiAgICAgICAgIHRvYmxlcm9uZSA9IHRvbGJlcm9uZV9zb21ldGhpbmdfb3Jfb3RoZXIpDQogIA0KY2FuZHlfMjAxN19yZW5hbWVkDQpgYGANCg0KYGBge3J9DQp2aWV3KGNhbmR5XzIwMTVfcmVuYW1lZCkNCnZpZXcoY2FuZHlfMjAxNl9yZW5hbWVkKQ0KdmlldyhjYW5keV8yMDE3X3JlbmFtZWQpDQpgYGANCg0KDQoNCkdldHRpbmcgYW4gaWRlYSBvZiBwZW9wbGUncyByZXNwb25zZXM6IA0KYGBge3J9DQoNCmRpc3RpbmN0KGNhbmR5XzIwMTVfcmVuYW1lZCwgYWdlKSANCiAgIyhjaHIpIDE0NiByZXNwb25zZXMsIHNvbWUgc2lsbHkgYW5kIHNvbWUgc3RyYW5nZQ0KZGlzdGluY3QoY2FuZHlfMjAxNV9yZW5hbWVkLCB0cmlja19vcl90cmVhdGluZykgDQogICMoY2hyKSB5ZXMgb3Igbm8gKE5BcyBpbiAyMDE3KQ0KZGlzdGluY3QoY2FuZHlfMjAxNV9yZW5hbWVkLCBzdGFyYnVyc3QpDQoNCg0KZGlzdGluY3QoY2FuZHlfMjAxNl9yZW5hbWVkLCBhZ2UpIA0KICAjIChjaHIpIDk4IGluY2wgc2lsbHkvc3RyYW5nZQ0KZGlzdGluY3QoY2FuZHlfMjAxNl9yZW5hbWVkLCB0cmlja19vcl90cmVhdGluZykgDQogICMoY2hyKSBZZXMgTm8gKE5BcyBpbiAyMDE3KQ0KZGlzdGluY3QoY2FuZHlfMjAxNl9yZW5hbWVkLCBnZW5kZXIpIA0KICAjIE1hbGUsIEZlbWFsZSwgT3RoZXIsIEknZCByYXRoZXIgbm90IHNheSwgTkENCmRpc3RpbmN0KGNhbmR5XzIwMTZfcmVuYW1lZCwgY291bnRyeSkgDQogICM5MyBzb21lIHNpbGx5LCBzb21lIGUuZy4gVVNBLCBVUywgdXMsIHUucy5hLiBldGMgDQpkaXN0aW5jdChjYW5keV8yMDE2X3JlbmFtZWQsIHN0YXJidXJzdCkNCg0KDQpkaXN0aW5jdChjYW5keV8yMDE3X3JlbmFtZWQsIGFnZSkgDQogICMoY2hyKSAxMDcgaW5jbCBzaWxseS9zdHJhbmdlDQpkaXN0aW5jdChjYW5keV8yMDE3X3JlbmFtZWQsIHRyaWNrX29yX3RyZWF0aW5nKQ0KICAjKGNocikgWWVzIE5vIGFuZCBOQQ0KZGlzdGluY3QoY2FuZHlfMjAxN19yZW5hbWVkLCBnZW5kZXIpIA0KICAjTWFsZSwgRmVtYWxlLCBPdGhlciwgSSdkIHJhdGhlciBub3Qgc2F5LCBOQQ0KZGlzdGluY3QoY2FuZHlfMjAxN19yZW5hbWVkLCBjb3VudHJ5KSANCiAgIzExOCBzb21lIHNpbGx5LCBzb21lIGUuZy4gVVNBLCBVUywgdXMsIHUucy5hLiBldGMgDQpkaXN0aW5jdChjYW5keV8yMDE3X3JlbmFtZWQsIHN0YXJidXJzdCkNCmBgYA0KDQoNCkpvaW5pbmcgYWxsIHRocmVlIHllYXJzIGJ5IGJpbmRpbmcgcm93cyBzbyBhcyB0byBrZWVwIGV2ZXJ5dGhpbmcNCg0KYGBge3J9DQpib3VuZF9jYW5keSA8LSBiaW5kX3Jvd3MoY2FuZHlfMjAxNV9yZW5hbWVkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBjYW5keV8yMDE2X3JlbmFtZWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmR5XzIwMTdfcmVuYW1lZCkNCg0KDQpib3VuZF9jYW5keSA8LSBib3VuZF9jYW5keSAlPiUgDQogIHJlbG9jYXRlKGNvdW50cnksIC5iZWZvcmUgPSA1KSAlPiUgDQogIHJlbG9jYXRlKHN0YXRlX29yX3Byb3YsIC5iZWZvcmUgPSA2KSAlPiUgDQogIHJlbG9jYXRlKGdlbmRlciwgLmJlZm9yZSA9IDcpDQoNCg0KIyB2aWV3KGJvdW5kX2NhbmR5KQ0KYGBgDQoNCg0KDQoNCg0KKipRVUVTVElPTiAxKiogDQpXaGF0IGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FuZHkgcmF0aW5ncyBnaXZlbiBhY3Jvc3MgdGhlIHRocmVlIHllYXJzLiANCihOdW1iZXIgb2YgY2FuZHkgcmF0aW5ncywgbm90IHRoZSBudW1iZXIgb2YgcmF0ZXJzLiBEb27igJl0IGNvdW50IG1pc3NpbmcgdmFsdWVzKQ0KDQpBTlNXRVIgLSA1OTAsMDEwIHJhdGluZ3MNCmBgYHtyfQ0KDQp0b3RhbF9yYXRpbmdzIDwtIGJvdW5kX2NhbmR5ICU+JSANCiAgc2VsZWN0KC1jKHllYXIsIGlkX251bWJlciwgYWdlLCANCiAgICAgICAgICAgIHRyaWNrX29yX3RyZWF0aW5nLCBjb3VudHJ5LCANCiAgICAgICAgICAgIHN0YXRlX29yX3Byb3YsIGdlbmRlcikpICU+JQ0KICBwaXZvdF9sb25nZXIoYnV0dGVyZmluZ2VyOnRha2VfNSwgDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJjYW5keSIsIA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInJhdGluZyIpICU+JSANCiAgZmlsdGVyKCFpcy5uYShyYXRpbmcpKSAlPiUgDQogIGNvdW50KG4oKSkNCnRvdGFsX3JhdGluZ3MNCg0KYGBgDQoNCg0KDQoNCioqQUdFIENMRUFOSU5HKioNCkFnZSBpcyBhIGNoYXJhY3RlciBjb2x1bW4gd2l0aCAyNzQgdmFsdWVzLiBUaGV5IGFyZSBudW1iZXJzLCBOQXMsIGFuZCBzdHJhbmdlIA0KYW5kIHNpbGx5IHZhbHVlcyANCi0gY2hhbmdlZCBhZ2UgY29sdW1uIHRvIGEgbnVtZXJpYyBidXQgaXQgb3V0cHV0IHN0cmFuZ2UgZmlndXJlcywgc28gSSBzcGVjaWZpZWQgDQogIGludGVnZXIgYW5kIHN0cmFuZ2UgYW5zd2VycyBiZWNhbWUgTkFzLiANCi0gU2VlbXMgdW5saWtlbHkgdGhhdCBhbnlvbmUgPiAxMDAgeWVhcnMgb2xkIGlzIGFuc3dlcmluZyBzbyBJIHJlbW92ZWQgdGhlbQ0KDQpgYGB7cn0NCiMgYm91bmRfY2FuZHkgJT4lIA0KIyAgZGlzdGluY3QoYWdlKQ0KDQpib3VuZF9hZ2VfdG9fbnVtZXJpYyA8LSBib3VuZF9jYW5keSAlPiUgDQogIG11dGF0ZShhZ2UgPSBhcy5pbnRlZ2VyKGFnZSkpICU+JSANCiAgYXJyYW5nZShhZ2UpDQoNCiMgYm91bmRfYWdlX3RvX251bWVyaWMgJT4lIA0KIyBkaXN0aW5jdChhZ2UpDQoNCmJvdW5kX2FnZV9jbGVhbmluZyA8LSBib3VuZF9hZ2VfdG9fbnVtZXJpYyAlPiUNCiAgbXV0YXRlKGFnZSA9IGlmX2Vsc2UoYWdlID4gOTksIE5BX2ludGVnZXJfLCBhZ2UpKQ0KYm91bmRfYWdlX2NsZWFuaW5nDQojIHZpZXcoYm91bmRfYWdlX2NsZWFuaW5nKQ0KYGBgDQoNCioqUVVFU1RJT04gVFdPKioNCldoYXQgd2FzIHRoZSBhdmVyYWdlIGFnZSBvZiBwZW9wbGUgd2hvIGFyZSBnb2luZyBvdXQgdHJpY2sgb3IgdHJlYXRpbmc/DQoNCkkga25vdyB0aGUgcmVzcG9uc2VzIGZvciB0cmljayBvciB0cmVhdGluZyBhcmUgIlllcyIgIk5vICIgYW5kICJOQSINCg0KQU5TV0VSIC0gVGhlIChyb3VuZGVkKSBhdmVyYWdlIGFnZSBvZiB0aG9zZSBnb2luZyB0cmljayBvciB0cmVhdGluZyBpcyAzNQ0KeWVhcnMgb2xkICgzNC45NDg5NyBpcyB0aGUgdW5yb3VuZGVkIHZhbHVlKQ0KDQpgYGB7cn0NCg0KDQpib3VuZF9hZ2VfY2xlYW5pbmcgJT4lIA0KICBzZWxlY3QoYWdlLCB0cmlja19vcl90cmVhdGluZykgJT4lIA0KICBncm91cF9ieSh0cmlja19vcl90cmVhdGluZykgJT4lIA0KICBzdW1tYXJpc2UoYXZlcmFnZV9hZ2UgPSByb3VuZChtZWFuKGFnZSwgbmEucm0gPSBUUlVFKSkpDQoNCiMgdG8ganVzdCBnZXQgdGhlIGFuc3dlciBmb3IgWWVzIG9uIGl0J3Mgb3duOiANCmJvdW5kX2FnZV9jbGVhbmluZyAlPiUgDQogIHNlbGVjdChhZ2UsIHRyaWNrX29yX3RyZWF0aW5nKSAlPiUgDQogIGdyb3VwX2J5KHRyaWNrX29yX3RyZWF0aW5nKSAlPiUgDQogIGZpbHRlcih0cmlja19vcl90cmVhdGluZyA9PSAiWWVzIikgJT4lIA0KICBzdW1tYXJpc2UoYXZlcmFnZV9hZ2UgPSByb3VuZChtZWFuKGFnZSwgbmEucm0gPSBUUlVFKSkpDQogICAgDQpgYGANCg0KKipRVUVTVElPTiBUSFJFRSoqDQpXaGF0IHdhcyB0aGUgYXZlcmFnZSBhZ2Ugb2YgcGVvcGxlIHdobyBhcmUgbm90IGdvaW5nIHRyaWNrIG9yIHRyZWF0aW5nPw0KQU5TV0VSIC0gVGhlIChyb3VuZGVkKSBhdmVyYWdlIGFnZSBvZiB0aG9zZSBub3QgZ29pbmcgdHJpY2sgb3IgdHJlYXRpbmcgaXMgMzkNCnllYXJzIG9sZCAoMzkuMTA0NTQgaXMgdGhlIHVucm91bmRlZCB2YWx1ZSkNCg0KYGBge3J9DQpib3VuZF9hZ2VfY2xlYW5pbmcgJT4lIA0KICBzZWxlY3QoYWdlLCB0cmlja19vcl90cmVhdGluZykgJT4lIA0KICBncm91cF9ieSh0cmlja19vcl90cmVhdGluZykgJT4lIA0KICBzdW1tYXJpc2UoYXZlcmFnZV9hZ2UgPSByb3VuZChtZWFuKGFnZSwgbmEucm0gPSBUUlVFKSkpDQoNCiMgdG8ganVzdCBnZXQgdGhlIGFuc3dlciBmb3IgTm8gb24gaXQncyBvd246IA0KYm91bmRfYWdlX2NsZWFuaW5nICU+JSANCiAgc2VsZWN0KGFnZSwgdHJpY2tfb3JfdHJlYXRpbmcpICU+JSANCiAgZ3JvdXBfYnkodHJpY2tfb3JfdHJlYXRpbmcpICU+JSANCiAgZmlsdGVyKHRyaWNrX29yX3RyZWF0aW5nID09ICJObyIpICU+JSANCiAgc3VtbWFyaXNlKGF2ZXJhZ2VfYWdlID0gcm91bmQobWVhbihhZ2UsIG5hLnJtID0gVFJVRSkpKQ0KDQpgYGANCg0KKipRVUVTVElPTiBGT1VSKiogDQoqKkZvciBlYWNoIG9mIGpveSwgZGVzcGFpciBhbmQgbWVoLCB3aGljaCBjYW5keSBiYXIgcmV2aXZlZCB0aGUgbW9zdCBvZiB0aGVzZSoqIA0KKipyYXRpbmdzPyoqIA0KDQpBcyBpbiBxdWVzdGlvbiAxLCBhIDIgY29sdW1uIHRpYmJsZSB3aXRoIGNhbmR5IGFuZCByYXRpbmcgd2FzIGNyZWF0ZWQgYW5kIGEgY291bnQNCm9mIGVhY2ggZGlzdGluY3QgYW5zd2VyIHdhcyBtYWRlIC0gZmlyc3RseSBjb3VudGluZyBlYWNoIGZvciBlYWNoIHJlc3BvbnNlIGFuZCANCmVhY2ggY2FuZHksIHRoZW4gZmlsdGVyaW5nIHRvIGZpbmQgdGhlIG1heGltdW0gY291bnQgZm9yIGVhY2ggcmF0aW5nLiANCg0KQU5TV0VSIC0gIA0KRGVzcGFpcjogZ3VtIHRoYXQgY29tZXMgd2l0aCBiYXNlYmFsbCBjYXJkcyByZXR1cm5lZCB0aGUgbW9zdCBkZXNwYWlyIHJlc3BvbnNlcw0KICAgICAgICAgIHdpdGggNywzNDENCkpveTpGdWxsIHNpemVkIGNhbmR5IGJhcnMgbWFkZSB0aGUgbW9zdCBwZW9wbGUgam95ZnVsIHdpdGggNyw1ODkgcmVzcG9uc2VzLg0KICAgIFRoaXMgc2VlbXMgdmVyeSBnZW5lcmljIHNvIEkgcmFuIGl0IGFnYWluIHRvIHJlbW92ZSB0aGUgZnVsbCBzaXplZCBjYW5keQ0KICAgIGJhcnMgYW5kIHRoZSB0b3AgSm95IHJlc3BvbnNlIHdhczogNzM2OSByZXNwb25zZXMgZm9yIHJlZXNlcyBwZWFudXQgYnV0dGVyDQogICAgY3Vwcw0KTWVoOiAxLDU3MCAiTWVoIiByZXNwb25zZXMgd2VyZSBnaXZlbiBmb3IgbG9sbGlwb3BzDQoNCg0KYGBge3J9DQoNCnJhdGVkX2NhbmR5IDwtIGJvdW5kX2NhbmR5ICU+JSANCiAgc2VsZWN0KC1jKHllYXIsIGlkX251bWJlciwgYWdlLCANCiAgICAgICAgICAgIHRyaWNrX29yX3RyZWF0aW5nLCBjb3VudHJ5LCANCiAgICAgICAgICAgIHN0YXRlX29yX3Byb3YsIGdlbmRlciwgYW55X2Z1bGxfc2l6ZWRfY2FuZHlfYmFyKSkgJT4lDQogIHBpdm90X2xvbmdlcihidXR0ZXJmaW5nZXI6dGFrZV81LCANCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImNhbmR5IiwgDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAicmF0aW5nIikNCnJhdGVkX2NhbmR5DQoNCnJhdGVkX2NhbmR5ICU+JSANCiAgZ3JvdXBfYnkocmF0aW5nLCBjYW5keSkgJT4lIA0KICBzdW1tYXJpc2UobnVtYmVyX29mX3JhdGluZ3MgPSBuKCkpICU+JSANCiAgZmlsdGVyKG51bWJlcl9vZl9yYXRpbmdzID09IG1heChudW1iZXJfb2ZfcmF0aW5ncykpDQoNCiMgcnVuIGFnYWluIHJlbW92aW5nIGdlbmVyaWMgImZ1bGwgc2l6ZWQgY2FuZHkgYmFycyINCg0KcmF0ZWRfY2FuZHkgPC0gYm91bmRfY2FuZHkgJT4lIA0KICBzZWxlY3QoLWMoeWVhciwgaWRfbnVtYmVyLCBhZ2UsIA0KICAgICAgICAgICAgdHJpY2tfb3JfdHJlYXRpbmcsIGNvdW50cnksIA0KICAgICAgICAgICAgc3RhdGVfb3JfcHJvdiwgZ2VuZGVyLCBhbnlfZnVsbF9zaXplZF9jYW5keV9iYXIpKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGJ1dHRlcmZpbmdlcjp0YWtlXzUsIA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiY2FuZHkiLCANCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJyYXRpbmciKQ0KcmF0ZWRfY2FuZHkNCg0KcmF0ZWRfY2FuZHkgJT4lIA0KICBncm91cF9ieShyYXRpbmcsIGNhbmR5KSAlPiUgDQogIHN1bW1hcmlzZShudW1iZXJfb2ZfcmF0aW5ncyA9IG4oKSkgJT4lIA0KICBmaWx0ZXIobnVtYmVyX29mX3JhdGluZ3MgPT0gbWF4KG51bWJlcl9vZl9yYXRpbmdzKSkNCg0KYGBgDQoNCg0KKipDT1VOVFJZIENMRUFOSU5HKiogDQoNCkZpcnN0bHkgZ2V0dGluZyBhbiBpZGVhIG9mIE5BcyBhbmQgZGlzdGluY3QgY291bnRyeSB2YWx1ZXM6DQoNCi0gTm90ZSB0aGF0IDIwMTUgKDU2MzAgcm93cyBvZiA5MzQ5KSBoYXMgbm8gY291bnRyeSBkYXRhLi4uIChhbGwgTkEpDQotIDU3MTUgcm93cyBpbiBib3VuZF9jYW5keSBoYXMgTkEgDQoNCi0gVGhlcmUgYXJlIDE2OSBkaXN0aW5jdCBjb3VudHJ5IG5hbWVzIGluY2x1ZGluZyBOQXMsIG1pc3Mtc3BlbGxpbmdzLCBhbmQgc2lsbHkvIA0KIHVua25vd24gYW5zd2VycyANCg0KYGBge3J9DQoNCmJvdW5kX2NhbmR5ICU+JSANCiAgZmlsdGVyKGlzLm5hKGNvdW50cnkpKQ0KDQpib3VuZF9jYW5keSAlPiUgDQogIGRpc3RpbmN0KGNvdW50cnkpIA0KYGBgDQoNCg0KVXNpbmcgc3RyaW5nciBhbmQgcmVnZXggdG8gcmVkdWNlICJjb3VudHJ5IiB2YWx1ZXMNCi0gRm9yIGNvbHVtbnMgdGhhdCB3ZXJlIG51bWJlcnMgb3IgY2xlYXJseSBmYWtlIChzaWxseSkgYW5zd2VycywgSSBjaGVja2VkIA0KICB0aGUgc3RhdGUgb3IgcHJvdmluY2UgY29sdW1uIHRvIHNlZSBpZiB0aGVyZSB3YXMgYSBtYXRjaCB0byBhIGNvdW50cnkNCi0gSSBjaGVja2VkIG15IHdvcmsgb25lIHJvdyBhdCBhIHRpbWUgdG8gdHJ5IGFuZCBlbnN1cmUgSSBkaWQgbm90IGNoYW5nZSANCiAgYW55dGhpbmcgdGhhdCB3YXMgbm90IG1lYW50IHRvIGJlIGNoYW5nZWQuIA0KLSBJIGFtIHN1cmUgdGhlcmUgYXJlIGZhc3Rlci8gYmV0dGVyIHdheXMgb2YgZG9pbmcgdGhpcywgYnV0IEkgd2FzIHByYWN0aWNpbmcNCiAgZGlmZmVyZW50IG9wdGlvbnMNCiANCg0KYGBge3J9DQpsaWJyYXJ5KHN0cmluZ3IpDQoNCmBgYA0KDQpjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiWyBdKlt1VV0rWyAuIV0qW3NTXStbIC4hXSpbYUFdKlsgLiFdKiIsICJTdGF0ZXMiKQ0KdHJpZWQgdGhpcyB0byBjaGFuZ2Ugd2hhdCB3YXMgbm93IFN0YXRlcyBVU0EgVVNBIGJ1dCBpdCBjaGFuZ2VkIHRoYXQgdG8gU3RhdGVzU3RhdGVzU3RhdGVzIGFuZCBhbHNvIEF1c3RyYWxpYSB0byBBU3RhdGVzdHJhbGlhLi4uIA0KYGBge3J9DQpib3VuZF9jb3VudHJ5X2NsZWFuIDwtIGJvdW5kX2NhbmR5ICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJbMC05XVswLTldWy5dWzAtOV0iLCAiU3RhdGVzIiksDQogICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiWzN8NHw1XVswLTldIiwgIlN0YXRlcyIpLA0KICAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bIF0qW3VVXStbIC4hXSpbc1NdK1sgLiFdKlthQV0qWyAuIV0qIiwgIlN0YXRlcyIpLA0KICAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bdVVdW25pdGVkXStcXHNbc1NdW3RUXSpbYUF8ZUV8c1NdW3RUXVtlRV1bc1N8YUFdIiwgIlN0YXRlcyIpLA0KICAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bdVVdW25OXVtpSV1bdFRdW2VFXVtkRHxzU10rXFxzW3NTXVt0VF1bYUFdW3RUXVtlRXxzU11bc1NdKiIsICJTdGF0ZXMiKSwNCiAgICAgICAgICMgdGhlIGFib3ZlIGRvZXNuJ3Qgd29yayBmb3IgYWxsLi4uIGkgcHJlc3VtZSB0aGVyZSBhcmUgc3BhY2VzIHNvbWV3aGVyZQ0KICAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bdVVdW25OXVtpSV1bdFRdW3NTXStcXHNbc1NdW3RUXVthQV1bdFRdW2VFXVtzU10qIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiW3NTXVt0VF1bYUF8ZUVdW3RUXSpbZUVdW3NTXSoiLCAiU3RhdGVzIiksIA0KICAgICAgICANCiAgICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJbdVVdK1tzU10rW2FBXSsiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJeW21NXVt1VXxlRV1bclJdK1tpSV1bY0N8a0tdW2FBXSIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bYUFdW21NXVtlRV1bclJdW2lJXVtjQ11bYUFdIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiXlxcJ1ttTV1bdVV8ZUVdW3JSXVtpSV1bY0NdW2FBXSIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIltzU11bdFRdW2FBXVt0VF1bZUVdW3NTXVshXSIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIlthLXpBLVpdKyBbLV0rIFt1VV1bc1NdW2FBXSIsICJTdGF0ZXMiKSwgDQogICAgICAgICMgdGhlIGFib3ZlIG9ubHkgY2hhbmdlZCAidGhlIGJlc3Qgb25lIC0gdXNhIiB0byAidGhlIGJlc3QgU3RhdGVzIiANCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIltvZl0gW2FBXVttZXJpY2FdIiwgIiIpLA0KICAgICAgICAjIGNoYW5nZXMgU3RhdGVzIG9mIEFtZXJpY2EgdG8gU3RhdGVzIG9lcmljYSBhbmQgaSBhbHNvIGhhdmUgdW5pdGVkIHN0YXRlcyBvZXJpY2ENCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gImNhc2NhZGlhIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiTmFybmlhIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiU3ViLUNhbmFkaWFuIE5vcnRoIEFtZXJpY2EuLi4gJ01lcmljYSIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIlRydW1waXN0YW4iLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJUaGUgcmVwdWJsaWMgb2YgQ2FzY2FkaWEiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJ1bmhpbmdlZCAiLCAiIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJOb3J0aCBDYXJvbGluYSIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIlBpdHRzYnVyZ2giLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJOZXcgWW9yayIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIkFoZW0uLi4uQW1lcmNhIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiVUQiLCAiU3RhdGVzIiksICANCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIk5ldyBKZXJzZXkiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJBbGFza2EiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJOLiBBbWVyaWNhIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiSSBkb24ndCBrbm93IGFueW1vcmUiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICIhLioiLCAiIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJTdGF0ZXNbc1N8ZER8YUFdIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiU3RhdGVzIG9lcmljYSIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIlN0YXRlc29mIEEiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJVbml0ZWQgU3RhdGVzIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiVGhlIFVuaXRlZCBTdGF0ZXMiLCAiU3RhdGVzIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJUaGUgU3RhdGVzIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiU3RhdGVzdGF0ZXMgU3RhdGVzIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiU3RhdGVzdGF0ZXMgU3RhdGVzIFN0YXRlcyIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIlN0YXRlc3RhdGVzIiwgIlN0YXRlcyIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiU3RhdGVzIFN0YXRlcyIsICJTdGF0ZXMiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bdVVdK1suXSpba0tdK1suXSoiLCAiVW5pdGVkIEtpbmdkb20iKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bdVVdW25pdGVkXStcXHNba0tdW2lJXVtuTl1bZERdW29PXVttTV0iLCAiVW5pdGVkIEtpbmdkb20iKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIl5bdVVdW25OXVtpSV1bdFRdW2VFXVtkRF0rXFxzW2tLXVtpSV1bbk5dW2dHXVtkRF1bb09dW21NXSIsICJVbml0ZWQgS2luZ2RvbSIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiXltlRV1bbk5dW2dHfGREXVtsTF1bYUFdW25OXVtkRF0iLCAiVW5pdGVkIEtpbmdkb20iKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gIlNjb3RsYW5kIiwgIlVuaXRlZCBLaW5nZG9tIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJeW2NDXVthLXpBLVpdezV9IiwgIkNhbmFkYSIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiXltjQ10rW2FBXStbbk5dK1thQV0rW2REXStbYUFdK1thQXxpSXxyUl0qW2FBfG5OXSpbaUldKlthQV0qIiwgIkNhbmFkYSIpLA0KICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksIHBhdHRlcm4gPSAiQ2FuYWUiLCAiQ2FuYWRhIiksDQogICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgcGF0dGVybiA9ICJeQ2FuYWRhYCIsICJDYW5hZGEiKSwNCiAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCBwYXR0ZXJuID0gInNvdmlldCBjYW51Y2tpc3RhbmAiLCAiQ2FuYWRhIikNCiAgICAgIA0KICAgICAgICApDQoNCmJvdW5kX2NvdW50cnlfY2xlYW4gJT4lIA0KICBkaXN0aW5jdChjb3VudHJ5KQ0Kdmlldyhib3VuZF9jb3VudHJ5X2NsZWFuKQ0KYGBgICAgICAgICAgICAgDQoNClN0aWxsIGFuZCBpc3N1ZToNCiMgU3RhdGVzPyBIYXJkIHRvIHRlbGwgYW55bW9yZS4uDQojIG9uZSAiVW5pdGVkIFN0YXRlcyIgbm90IGNoYW5naW5nIChwcm9iYWJseSBzcGFjZXMgaXNzdWU/PykNCiMgU3RhdGVzIChJIHRoaW5rIGJ1dCBpdCdzIGFuIGVsZWN0aW9uIHllYXIgc28gd2hvIGNhbiByZWFsbHkgdGVsbCkNCiMgSSBwcmV0ZW5kIHRvIGJlIGZyb20gQ2FuYWRhLCBidXQgSSBhbSByZWFsbHkgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcy4NCiMgdGhlcmUgaXNuJ3Qgb25lIGZvciBvbGQgbWVuDQojIG9uZSBvZiBvbmVzCQkocHJldmlvdXNseSAib25lIG9mIHRoZSBnb29kIG9uZXMiPykNCiMgVGhlIFlvbyBFc3NhYXl5eXl5eQ0KIyB0aGlzIG9uZQ0KIyBuZXZlcmxhbmQgDQojIHNvbWV3aGVyZQ0KIyBnb2QncyBjb3VudHJ5IA0KIyBFVUENCiMgU2VlIGFib3ZlDQojIE5vdCB0aGUgb3IgQ2FuYWRhIChwcmV2aW91c2x5IG5vdCB0aGUgVVMgb3IgY2FuYWRhKQ0KIyBEZW5pYWwgDQojIEVhcnRoIA0KIyBpbnNhbml0eSBsYXRlbHkgDQojIEEgDQojIENhbiANCiMgQXRsYW50aXMNCiMgTmFybmlhDQojIDEgDQojIHN1YnNjcmliZSB0byBkbTR1ejMgb24geW91dHViZQkJDQojIEZlYXIgYW5kIExvYXRoaW5nDQoNCg0K